#ifndef __PIC_H__
#define __PIC_H__

/* Puertos del PIC */

#define PIC_1_CTRL_PORT		0x20
#define PIC_1_DATA_PORT		0x21
#define PIC_2_CTRL_PORT		0xA0
#define PIC_2_DATA_PORT		0xA1

/* Initialization Command Words */

#define ICW1_ICW4       0x01    // Set: ICW4 se va a enviar			Clear: ICW4 no se va a enviar
#define ICW1_SINGLE     0x02    // Set: Unico PIC					Clear: Mas de un PIC
#define ICW1_INTERVAL4  0x04    // Set: Vector de Int de 4 bytes	Clear: Vector de Interrupciones de 8 bytes
#define ICW1_LEVEL      0x08    // Set: Interrupciones por Nivel	Clear: Interrupciones por Flanco
#define ICW1_INIT       0x10    // Inicializacion

#define ICW3_MATTACH2   0x04    // El slave ingresa por IRQ2
#define ICW3_SATTACH2   0x02

#define ICW4_8086       0x01    // Set: Modo 8086 			Clear: Modo 8085
#define ICW4_AUTO       0x02    // Set: EOI automatico 		Clear: EOI normal
#define ICW4_MASTER     0x04    // Set: Master 				Clear: Esclavo
#define ICW4_BUFFERED   0x08    // Set: Buffered Mode On 	Clear: Buffered Mode Off
#define ICW4_SFNM       0x10    // Set: Fully Nested 		Clear: Not Fully Nested

#define PIC_EOI			0x20    // EOI

/* Offsets para los PIC's */

#define PIC1_OFFSET 	0x20
#define PIC2_OFFSET 	0x28

/* Exports */

void pic_reset();
void pic_enable();
void pic_disble();
void pic_eoi_1();
void pic_eoi_2();

#endif /* __PIC_H__ */
